package org.wyw.solution;

@Solution(
        id = 8,
        title = "两个字符串相加",
        difficulty = "medium",
        link = "https://leetcode.cn/problems/add-strings/description/"
)

/**
 * 给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和并同样以字符串形式返回。 *
 * 你不能使用任何內建的用于处理大整数的库（比如 BigInteger）， 也不能直接将输入的字符串转换为整数形式。
 *
 * 示例 1：
 * 输入：num1 = "11", num2 = "123"
 * 输出："134"
 */
public class Solution008 {
    /**
     * 思路: 用两个指针从后往前分别遍历两个字符串，将相同位置的数相加后(若位数不同，高位没有的补0) 对10取模就是答案该位置的值，除以10 就是进位
     * 单个的数字字符串转整数 可以用减去’0‘字符串得到整数
     */
    public String addStrings(String num1, String num2) {
        StringBuffer ans = new StringBuffer();
        //add 表示进位
        int i = num1.length() -1 , j = num2.length()-1, add=0;
        while (i>=0 || j>=0 || add > 0){
            int x = i>= 0 ? num1.charAt(i) - '0' : 0;
            int y = j>= 0 ? num2.charAt(j) - '0' : 0;
            int result = x + y + add;
            ans.append(result%10);
            add = result/10;
            i--;
            j--;
        }
        return ans.reverse().toString();
    }

    public static void main(String[] args) {
        Solution008 solu = new Solution008();
        String num1 = "11";
        String num2 = "123";
        String res = solu.addStrings(num1, num2);
        System.out.println(res);
    }
}
